package final02;
/*
* final修饰变量
*   变量按定义位置划分：
*       1.类中方法外：成员变量
*       2.类中方法内：局部变量
*   变量按类型划分：
*       1.基本类型
*       2.引用类型
*   a.final修饰成员变量
*      一旦被final修饰，只能赋值一次
*   b.final修饰局部变量
*      一旦被final修饰,只能赋值一次
*   c.final修饰引用类型
*      一旦被final修饰，只能赋值一次，引用变量中存储的地址值不会改变（这个引用变量恒指向该对象）
* */
public class Demo {

    int num;
    //a.final修饰成员变量
    final int value;//可以在这里直接赋值，只能赋值一次
    //value = 10;
    public Demo(){
        value = 10;//也可在构造方法中进行赋值，但都只能赋值一次，（实际上是编译器会自动进行赋值final int value = 10;）
    }

    public static void main(String[] args) {
        int i = 10;
        //b.final修饰局部变量
        final int j = 15;//final修饰的局部变量，只能赋值一次
        final int c;
        c=15;//也可以单独对局部变量进行赋值，但也只能赋值一次
        System.out.println(j);

        //c.final修饰引用变量
        final Demo d2 = new Demo();//final修饰d2，d2中存储的是new Demo()的内存地址值
        //d2=null;
        //d2 = new Demo();
    }
}
